/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.isfd.domain.bo;

import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.comac.ins.common.core.validate.AddGroup;
import com.comac.ins.common.core.validate.EditGroup;
import com.comac.ins.isfd.domain.IsfdMetadata;

import java.util.Date;

/**
 * 元数据信息业务对象 isfd_metadata
 *
 * @author Lion Li
 * @date 2024-06-14
 */
@Data
@EqualsAndHashCode(callSuper = false)
@AutoMapper(target = IsfdMetadata.class, reverseConvertGenerate = false)
public class IsfdMetadataBo {

    /**
     * 唯一标识符
     */
    @NotNull(message = "唯一标识符不能为空", groups = { EditGroup.class })
    private Long id;

    /**
     * 数据源名称
     */
    @NotBlank(message = "数据源名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String dataSourceName;

    /**
     * 数据源类型
     */
    @NotBlank(message = "数据源类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String dataSourceType;

    /**
     * 表名或数据集名称
     */
    @NotBlank(message = "表名或数据集名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String tableName;

    /**
     * 表格或数据集描述
     */
    @NotBlank(message = "表格或数据集描述不能为空", groups = { AddGroup.class, EditGroup.class })
    private String tableDescription;

    /**
     * 数据结构信息
     */
    @NotBlank(message = "数据结构信息不能为空", groups = { AddGroup.class, EditGroup.class })
    private String schemaInfo;

    /**
     * 数据条数
     */
    @NotBlank(message = "数据条数不能为空", groups = { AddGroup.class, EditGroup.class })
    private String recordCount;

    /**
     * 数据原文件名
     */
    @NotBlank(message = "数据原文件名不能为空", groups = { AddGroup.class, EditGroup.class })
    private String originalFileName;

    /**
     * 数据原文件ID
     */
    @NotNull(message = "数据原文件ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long originalFileId;

    /**
     * 数据解析规则ID
     */
    @NotNull(message = "数据解析规则ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long parsingRuleId;

    /**
     * 业务应用场景(1-结构CAE)
     */
    @NotBlank(message = "业务应用场景(1-结构CAE)不能为空", groups = { AddGroup.class, EditGroup.class })
    private String businessScenarioNo;

    /**
     * 业务应用场景名称
     */
    @NotBlank(message = "业务应用场景名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String businessScenarioName;

    /**
     * 数据存储类型(0-结构化，1-半结构化，2-非结构化)
     */
    @NotBlank(message = "数据存储类型(0-结构化，1-半结构化，2-非结构化)不能为空", groups = { AddGroup.class, EditGroup.class })
    private String storageType;

    /**
     * 数据存储位置
     */
    @NotBlank(message = "数据存储位置不能为空", groups = { AddGroup.class, EditGroup.class })
    private String storageLocations;

    /**
     * 要素数据分类（1-材料库）
     */
    @NotBlank(message = "要素数据分类（1-材料库）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String elementDataType;

    /**
     * 要素数据分类名称
     */
    @NotBlank(message = "要素数据分类名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String elementDataName;

    /**
     * 要素库二级分类
     */
    @NotBlank(message = "要素库二级分类不能为空", groups = { AddGroup.class, EditGroup.class })
    private String elementLibrarySecondCategory;

    /**
     * 创建者
     */
    @NotBlank(message = "创建者不能为空", groups = { AddGroup.class, EditGroup.class })
    private String createdBy;

    /**
     * 创建时间
     */
    @NotNull(message = "创建时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date createdAt;

    /**
     * 最后修改者
     */
    @NotBlank(message = "最后修改者不能为空", groups = { AddGroup.class, EditGroup.class })
    private String lastModifiedBy;

    /**
     * 最后修改时间
     */
    @NotNull(message = "最后修改时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date lastModifiedAt;

    /**
     * 数据责任人
     */
    @NotBlank(message = "数据责任人不能为空", groups = { AddGroup.class, EditGroup.class })
    private String dataOwner;

    /**
     * 访问权限
     */
    @NotBlank(message = "访问权限不能为空", groups = { AddGroup.class, EditGroup.class })
    private String accessPermissions;

    /**
     * 数据保留周期（年）
     */
    @NotNull(message = "数据保留周期（年）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long retentionPeriod;

    /**
     * 安全分类
     */
    @NotBlank(message = "安全分类不能为空", groups = { AddGroup.class, EditGroup.class })
    private String securityClassification;

    /**
     * 标签
     */
    @NotBlank(message = "标签不能为空", groups = { AddGroup.class, EditGroup.class })
    private String tags;

    /**
     * 相关系统
     */
    @NotBlank(message = "相关系统不能为空", groups = { AddGroup.class, EditGroup.class })
    private String relatedSystems;

    /**
     * 备注
     */
    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
    private String notes;

    /**
     * 状态
     */
    @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
    private String status;

    /**
     * 数据质量指标
     */
    @NotBlank(message = "数据质量指标不能为空", groups = { AddGroup.class, EditGroup.class })
    private String dataQualityMetrics;


}
